diff --git a/system/core/Benchmark.php b/system/core/Benchmark.php
old mode 100644
new mode 100755
index 515550e..a200727
--- a/system/core/Benchmark.php
+++ b/system/core/Benchmark.php
@@ -29,6 +29,11 @@
  */
 class CI_Benchmark {
 
+	/**
+	 * List of all benchmark markers and when they were added
+	 *
+	 * @var array
+	 */
 	var $marker = array();
 
 	// --------------------------------------------------------------------
diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php
old mode 100644
new mode 100755
index a8895d6..5f79551
--- a/system/core/CodeIgniter.php
+++ b/system/core/CodeIgniter.php
@@ -27,17 +27,19 @@
  * @link		http://codeigniter.com/user_guide/
  */
 
-/*
- * ------------------------------------------------------
- *  Define the CodeIgniter Version
- * ------------------------------------------------------
+/**
+ * CodeIgniter Version
+ *
+ * @var string
+ *
  */
-	define('CI_VERSION', '2.1.0-dev');
+	define('CI_VERSION', '2.0.2');
 
-/*
- * ------------------------------------------------------
- *  Define the CodeIgniter Branch (Core = TRUE, Reactor = FALSE)
- * ------------------------------------------------------
+/**
+ * CodeIgniter Branch (Core = TRUE, Reactor = FALSE)
+ *
+ * @var boolean
+ *
  */
 	define('CI_CORE', FALSE);
 
diff --git a/system/core/Config.php b/system/core/Config.php
old mode 100644
new mode 100755
index 0e6f10e..714c466
--- a/system/core/Config.php
+++ b/system/core/Config.php
@@ -28,8 +28,23 @@
  */
 class CI_Config {
 
+	/**
+	 * List of all loaded config values
+	 *
+	 * @var array
+	 */
 	var $config = array();
+	/**
+	 * List of all loaded config files
+	 *
+	 * @var array
+	 */
 	var $is_loaded = array();
+	/**
+	 * List of paths to search when trying to load a config file
+	 *
+	 * @var array
+	 */
 	var $_config_paths = array(APPPATH);
 
 	/**
@@ -251,13 +266,13 @@
 			return $this->slash_item('base_url').$this->item('index_page').'?'.$this->_uri_string($uri);
 		}
 	}
-	
+
 	// -------------------------------------------------------------
-	
+
 	/**
 	 * Base URL
 	 * Returns base_url [. uri_string]
-	 * 
+	 *
 	 * @access public
 	 * @param string $uri
 	 * @return string
@@ -266,12 +281,12 @@
 	{
 		return $this->slash_item('base_url').ltrim($this->_uri_string($uri),'/');
 	}
-	
+
 	// -------------------------------------------------------------
-	
+
 	/**
 	 * Build URI string for use in Config::site_url() and Config::base_url()
-	 * 
+	 *
 	 * @access protected
 	 * @param  $uri
 	 * @return string
@@ -305,7 +320,7 @@
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * System URL
 	 *
diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php
index a71fca7..0dd29c2 100644
--- a/system/database/DB_forge.php
+++ b/system/database/DB_forge.php
@@ -234,7 +234,7 @@
 			show_error('A table name is required for that operation.');
 		}
 
-		$sql = $this->_rename_table($table_name, $new_table_name);
+		$sql = $this->_rename_table($this->db->dbprefix.$table_name, $this->db->dbprefix.$new_table_name);
 		return $this->db->query($sql);
 	}
 
diff --git a/system/helpers/string_helper.php b/system/helpers/string_helper.php
index 7765bba..2f928a7 100644
--- a/system/helpers/string_helper.php
+++ b/system/helpers/string_helper.php
@@ -243,6 +243,21 @@
 // ------------------------------------------------------------------------
 
 /**
+ * Add's _1 to a string or increment the ending number to allow _2, _3, etc
+ *
+ * @param   string  $str  required
+ * @return  string
+ */
+function increment_string($str, $first = 1, $separator = '_')
+{
+	preg_match('/(.+)'.$separator.'([0-9]+)$/', $str, $match);
+
+	return isset($match[2]) ? $match[1].$separator.($match[2] + 1) : $str.$separator.$first;
+}
+
+// ------------------------------------------------------------------------
+
+/**
  * Alternator
  *
  * Allows strings to be alternated.  See docs...
